import Vue from 'vue'
import axios from 'axios'
import store from './vuex/vuex.js'

axios.defaults.retry = 2; // 重试次数
axios.defaults.retryDelay = 1000; // 重试延时

// 添加请求拦截器
axios.interceptors.request.use(function(config) {
    // 在发送请求之前做些什么
    return config;
}, function(error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
axios.interceptors.response.use(function(response) {
    // 对响应数据做点什么
    return response;
}, function(error) {
    var config = error.config;

    // 对响应错误做点什么
    if (error.response.status == 401) {
        store.dispatch("account/logout");
    } else if (error.response.status == 504) {
        // 设置重置次数，默认为0
        config.__retryCount = config.__retryCount || 0;
        // 判断是否超过了重试次数
        if (config.__retryCount >= config.retry) {
            return Promise.reject(error);
        }
        //重试次数自增
        config.__retryCount += 1;
        var backoff = new Promise(function(resolve) {
            setTimeout(function() {
                resolve();
            }, config.retryDelay || 1);
        });
        console.debug("超时重试");
        //重新发起axios请求
        return backoff.then(function() {
            return axios(config);
        });
    }
    return Promise.reject(error.response.data)
});

Vue.prototype.$http = axios;